<?
require_once "simpletest/unit_tester.php";
require_once "simpletest/reporter.php";
require_once "classe.php";
require_once "propriedades.fixture.php";

/*
* Teste Unitario da parte de propriedade da classe Qi_Reflexao_Reverso
*/
class Qi_Reflexao_Reverso_Propriedades_Test extends UnitTestCase 
{
	private function helper($msg, $esperado, $classe, $propriedade)
	{
		$prop = new ReflectionProperty($classe, $propriedade);
		$retorno = Qi_Reflexao_Reverso::propriedade($prop);
		$this->assertEqual($esperado, $retorno, $msg);
	}

	// @TODO é muito comum fazer testes como o abaixo. Verificar se o simpletest não tenha nada que automatize isto.
	function test_todos()
	{
		$testes = array();	
		
		$testes[] = array("Comentário",
		'/** Comentario da variavel a */
public $a = null',
		'teste', 'a');

		$testes[] = array("Propriedade sem valor deve ser considerada null",
							'public $c = null', 'testesemnada', 'c');

		$testes[] = array("Propriedade deve ser privada com valor numerico 2",
							'private $c = 2', 'teste', 'c');

		$testes[] = array("Tipo array",
							'private $array = array (  0 => 1,  1 => 2,  2 => 3,)', "teste", "array");

		$testes[] = array("Tipo nulo explícito",
							'public $obj = null','Nulo', 'obj');

		$testes[] = array("Zero nao pode ser considerado null nem false",
							'public $zero = 0', 'Zero', 'zero');

		$testes[] = array("False não pode ser zero nem null",
							'public $falso = false', 'Falso', 'falso');

		$testes[] = array("String deve ser com aspas simples",
							"public \$aspa = ''", "Aspa", "aspa");

		$testes[] = array("String deve ser com aspas simples",
							'public $true = true', 'TTrue', 'true');

		foreach($testes as $teste):
			$this->helper($teste[0], $teste[1], $teste[2], $teste[3]);
		endforeach;
	}

} // classe Qi_Reflexao_Reverso_Propriedades_Test


$included_files = get_included_files();
if ($included_files[0] == __FILE__):
	$test = new Qi_Reflexao_Reverso_Propriedades_Test(); 
	$test->run(new HtmlReporter());
endif;

?>